//拦截axios所有http请求，预先放入token请求头
//请求拦截器
import axios from 'axios';
import store from './store'
import router from './router';

//axios配置选项 拦截器 请求拦截 做个 中间件
axios.interceptors.request.use(
  config => {
    if (store.state.token) { //若令牌存在，则放入请求头
      config.headers.token = store.state.token;
    }

    return config
  }
)

//在main.js导入一下

//响应拦截器，提前预处理响应
//use()有两个回调函数
axios.interceptors.response.use(
  response => {
    //r如果code是-1，说明用户已注销或者 token已过期
    //此时需要重新登陆，并且还有清除本地缓存信息
    if (response.status == 200) {
      const data = response.data;

      if (data.code == -1) {
        clearHandler();
      }
    }

    return response;
  }, err => {
    if (err.response.status == 401) {
      // 如果用户为授权
      clearHandler();
    }
  }
)

function clearHandler() {
  //清空缓存
  store.commit('setToken', '');
  localStorage.removeItem('token');

  //跳转至登录页
  //当前在什么路由，就把它拿出来，做为回跳地址
  router.push({ path: '/login', redirect: router.currentRoute.path })
}